package com.xoa.service.workflow.TerpServer;

import com.xoa.model.dataSrc.DataSrc;
import com.xoa.model.workflow.TerpServer;
import com.xoa.util.ToJson;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;

public interface TerpServerService {

    /**
     * 保存数据源
      * @param terpServer
     * @return
     */
    boolean insertTerpServer(TerpServer terpServer);

    /**
     * 查询所有数据源名称
     * @return
     * @param terpServer
     */
    List<TerpServer> selectDbServerNameTerpServer(TerpServer terpServer);

    /**
     * 删除数据源配置
     * @param serverId
     * @return
     */
    boolean deleteTerpServer(Integer serverId);

    /**
     * 显示当前数据源下所有数据库名
     * @return
     */
    List<String> TerpServerShowDatabases();

    /**
     * 通过serverId查询所有信息
     * @param serverId
     * @return
     */
    TerpServer TerpServerShowDatabasesByServerId(Integer serverId);

    /**
     * 显示当前数据库下所有表名
     * @param databaseName 数据库名
     * @return
     */
    List<String> TerpServerShowAllDatabaseName(String databaseName);

    /**
     * 显示表结构
     * @param tableName
     * @return
     */
    List<String> ShowTableStructure(String tableName);

    /**
     * 新建数据源 数据库创建表
     * @param map
     * @return
     */
    boolean CreateTerpServerTable(Map map);

    /**
     * 查询数据源名称 like
     * @param map
     * @return
     */
    List<DataSrc> selectTerpServerByLike(Map map);

    DataSrc findTableSize(Map map);

    /**
     * 删除内部展示数据源
     * @param dID
     * @return
     */
    boolean deleteTerpServerTwo(Integer dID);

    /**
     * 获取该表所有的列
     * @param map
     * @return
     */
    List<String> showColumns(Map<String,Object> map);


    /**
     * 向新建的表中添加字段
     * @param map
     * @return
     */
    /*boolean alterTableField(Map map);*/

    /**
     * 为该字段添加唯一性约束
     * @param map
     * @return
     */
//    boolean onlyYesAndNo(Map map);

    /**
     * 编辑数据源字段（更改信息）
     * @param map
     * @return
     */
//    boolean updataTerpServerField(Map map);

    /**
     * 删除数据源字段
     * @param map
     * @return
     */
    boolean dropTableField(Map map);

    /**
     * 清空表中所有信息
     * @param tableName
     * @return
     */
    boolean delectTableAllData(String tableName);



    /**
     * 添加管理员
     * @param dataSrc
     * @return
     */
    boolean addAdministrators(DataSrc dataSrc);

    /**
     * 新建数据源之后
     * 将其保存在data_src表中
     * @param dataSrc
     * @return
     */
    boolean insertDataSrcNewtable(DataSrc dataSrc);

    /**
     * 查询表中所有数据
     * @param tableName
     * @return
     */
    List<Map<String,String>> selectOneTableByTableName(String tableName);

    /**
     * 显示表的所有字段
     * @param map
     * @return
     */
    List<String> selectOneTableFieldByTableName(Map map);

    /**
     * 向某一张表添加数据
     * @param map1
     * @return
     */
    boolean insertAnyOneTable(Map map1);

    //编辑外部数据源
    ToJson editTerpServer(TerpServer terpServer);

    //删除表
    int deleteTable(Integer dID);

    //查找表是否存在
    int countTable(Map map);

    //查找内部数据源，和表结构
    DataSrc findByDataSrcId(HttpServletRequest request, Map map);

    //修改内部数据源信息
    boolean updataTerpServerById(DataSrc dataSrc);

    //修改创建的表结构字段信息
    boolean ALTERDataSrcTable( Map map);

    //公共查询表方法返回全部信息，传入表名
    List<Map<String,Object>> selectAll(Map map);

    //公共新增方法
    boolean insertData(Map map);

    boolean updateData(Map map);

    //删除除字段方法
    int delField(Map map);

    //修改外部数据源信息
    boolean updataTerpById(TerpServer terpServer);

    //内部数据源导入方法
    ToJson terpServerImportExcel(HttpServletRequest request, HttpServletResponse response, MultipartFile file, HttpSession session, String tableName);

    //查询库中所有表
    List findtablAll(String firstDBSource);
    String findDbName(String firstDBSource,String tabName);
    String findDbTabName(String sqlType,String TabName,String Column);

    //查询表所有字段
    List findTableField(Map map);

    //根据ID主键查询trep
    TerpServer selectTerpById(Integer serverId);

    //查询内部数据源的表结构
    ToJson getTabField(HttpServletRequest request, String tableName);
}
